// ParamStructs.h

// Parametre servera pre model sveta
 
#ifndef PARAMSTRUCTS_H
#define PARAMSTRUCTS_H

// Maximalna velkost retazca pre ulozenie v strukture SERVER_PARAMS
#define SERVER_PARAMS_STRING_SIZE 32

// Pocet parametrov struktury SERVER_PARAMS
#define SERVER_PARAMS_COUNT 137
// Parametre soccer servera
struct SERVER_PARAMS
{
	// NAZOV PARAMETRA			   VYZNAM PARAMETRA
	//----------------			   ----------------		
	int back_passes;			// Spatne prihravky brankarovi bez intervencie supera.
	int catch_ban_cycle;		// Ak bolo prikaz catch neuspesny, tak trva "catch_ban_cycle" cyklov, pokial sa moze pouzit dalsi prikaz catch. 
	int clang_advice_win;		// Pocet clang_advice sprav na okno.
	int clang_define_win;		// Pocet clang_define sprav na okno.
	int clang_del_win;			// Pocet clang_del sprav na okno.
	int clang_info_win;			// Pocet clang_info sprav na okno.
	int clang_mess_delay;		// Oneskorenie medzi prevzatim spravy (serverom) a jej dorucenim hracom.
	int clang_mess_per_cycle;	// Maximalny pocet sprav kouca posielanych za cyklus
	int clang_meta_win;			// Pocet clang_meta sprav na okno.
	int clang_rule_win;			// Pocet clang_rule sprav na okno.
	int clang_win_size;			// Casove okno, ktore kontroluje kolko sprav moze byt poslanych (koucov jazyk).
	int coach_port;				// Offline koucov port.
	int drop_ball_time;			// Pocet cyklov, po ktorych sa lopta dostava automaticky do hry.
	int forbid_kick_off_offside;// Zakaz pokracovania hry po ofsajde.
	int free_kick_faults;		// Nespravne zahrane pokutove kopy.
	int freeform_send_period;	// Koucovia mozu posielat "Freeform" spravy pocas freeform_send_period cyklov.
	int freeform_wait_period;	// Kolko cyklov musi kouc pockat, kym nastane obdobie posielania "Freeform" sprav (freeform_send_period).
	int goalie_max_moves;		// Maximalny pocet prikazov move brankara po chyteni lopty.
	int half_time;				// Dlzka polcasu v sekundach.
	int hear_decay;				// Hrac pocuje spravu, iba ak jeho kapacita pocutia je aspon hear_decay. 
	int hear_inc;				// Kazdy cyklus sa kapacita pocutia zvacsuje o hear_inc.
	int hear_max;				// Maximalna kapacita pocutia je hear_max.
	int max_goal_kicks;			// Pridane kvoli vynuteniu vhodneho vykonania kopov na branu.
	int olcoach_port;			// Koucov (online) port.
	int point_to_ban;			// Je to minimalny pocet cyklov medzi dvoma uspesnymi "pointto" prikazmi.
	int point_to_duration;		// Pocet cyklov trvania prikazu "pointto".
	int port;					// Cislo hracovho portu.
	int proper_goal_kicks;		// Spravne vykopy na branku.
	int recv_step;				// Casovy krok prijatia prikazov (v ms).
	int say_coach_cnt_max;		// Horny limit mnozstva sprav online kouca.
	int say_coach_msg_size;		// Horny limit dlzky spravy online kouca.
	int say_msg_size;			// Dlzka retazcovej spravy say (v bytoch).
	int send_step;				// Casovy krok vizualnej informacie (v ms).
	int send_vi_step;			// Interval pohladu online kouca.
	int sense_body_step;		// Informacia o fyzickom statuse hraca automaticky posielana kazdych sense_body_step ms.  
	int simulator_step;			// Casovy krok simulacie (v ms).
	int team_actuator_noise;	// Priznak, ci pouzivat timovo-specificku akcnu zlozku sumu.
	int use_offside;			// Priznak pre pouzivanie pravidla ofsajdu.
	int verbose;				// Priznak pre "verbose" mod.
	int wind_none;				// Ziadny faktor vetra.
	int wind_random;			// Faktor vetra je nahodny.

	int coach;					// ???
	int coach_w_referee;		// ???
	int fullstate_l;			// ???
	int fullstate_r;			// ???
	int game_log_compression;	// ???
	int game_log_dated;			// ???
	int game_log_fixed;			// ???
	int game_log_version;		// ???
	int game_logging;			// ???
	int log_times;				// ???
	int old_coach_hear;			// ???
	int profile;				// ???
	int record_messages;		// ???
	int send_comms;				// ???
	int slow_down_factor;		// ???
	int start_goal_l;			// ???
	int start_goal_r;			// ???
	int synch_micro_sleep;		// ???
	int synch_mode;				// ???
	int synch_offset;			// ???
	int tackle_cycles;			// ???
	int text_log_compression;	// ???
	int text_log_dated;			// ???
	int text_log_fixed;			// ???
	int text_logging;			// ???

	char game_log_dir[SERVER_PARAMS_STRING_SIZE];			// ???
	char game_log_fixed_name[SERVER_PARAMS_STRING_SIZE];	// ???
	char landmark_file[SERVER_PARAMS_STRING_SIZE];			// ???
	char log_date_format[SERVER_PARAMS_STRING_SIZE];		// ???
	char text_log_dir[SERVER_PARAMS_STRING_SIZE];			// ???
	char text_log_fixed_name[SERVER_PARAMS_STRING_SIZE];	// ???

	float audio_cut_dist;					// Povedana sprava hraca je prenasana iba hracom do vzdialenosti audio_cut_dist metrov.
	float ball_accel_max;					// Maximalne zrychlenie lopty.
	float ball_decay;						// Utlm lopty.
	float ball_rand;						// Nahodny sum nasuperponovany k lopte.
	float ball_size;						// Velkost lopty.
	float ball_speed_max;					// Maximalna rychlost lopty.
	float ball_weight;						// Vaha lopty.
	float catch_probability;				// Pravdepodonost chytenia lopty brankarom.
	float catchable_area_l;					// Dlzka oblasti chytenia lopty.
	float catchable_area_w;					// Sirka oblasti chytenia lopty.
	float ckick_margin;						// ???
	float control_radius;					// Polomer kontroly.
	float dash_power_rate;					// Miera energie pri sprintovani.
	float effort_dec;						// Ubytok usilia pri sprintovani.
	float effort_dec_thr;					// Prah ubytkov usilia pri sprintovani.
	float effort_inc;						// Prirastok usilia pri sprintovani.
	float effort_inc_thr;					// Prah prirastkov usilia pri sprintovani.
	float effort_init;						// Pocitaocna hodnota usilia.
	float effort_min;						// Minimalna hranica usilia hraca pre sprintovanie.
	float goal_width;						// Sirka branky
	float inertia_moment;					// Moment zotrvacnosti pre otocenie
	float kick_power_rate;					// Miera energie pri kopnuti.
	float kick_rand;						// Sum priamo priadany ku kopnutiam.
	float kick_rand_factor_l;				// Faktor potrebny pre vynasobenie s kick_rand pre tim hrajuci vlavo.
	float kick_rand_factor_r;				// Faktor potrebny pre vynasobenie s kick_rand pre tim hrajuci vpravo.
	float kickable_margin;					// Rozpatie, v ktorom sa do kopnut do lopty.
	float maxmoment;						// Maximalny moment.
	float maxneckang;						// Maximalne natocenie krku vpravo (v stupnoch).
	float maxneckmoment;					// Maximalny moment krku.
	float maxpower;							// Maximalna sila.
	float minmoment;						// Minimalny moment.
	float minneckang;						// Maximalne natocenie krku vlavo (v stupnoch).
	float minneckmoment;					// Minimalny moment krku.
	float minpower;							// Minimalna sila.
	float offside_active_area_size;			// Velkost aktivnej oblasti pri ofsajde.
	float offside_kick_margin;				// Rozpatie pri kopnuti do ofsajdu.
	float player_accel_max;					// Maximalne zrychlenie hraca.
	float player_decay;						// Utlm hraca.
	float player_rand;						// Sum pri rychlosti pohybu hraca.
	float player_size;						// Velkost hraca.
	float player_speed_max;					// Maximalna rychlost hraca.
	float player_weight;					// Vaha hraca.
	float prand_factor_l;					// Faktor potrebny pre vynasobenie s "prand" pre tim hrajuci vlavo.
	float prand_factor_r;					// Faktor potrebny pre vynasobenie s "prand" pre tim hrajuci vpravo.
	float quantize_step;					// Kvantizacny krok vzdialenosti pre pohybujuce sa objekty.
	float quantize_step_l;					// Kvantizacny krok vzdialenosti pre orientacne body.
	float recover_dec;						// Ubytok pri zotavovani hraca.
	float recover_dec_thr;					// Prah ubytku pri zotavovani hraca.
	float recover_min;						// Minimalne zotavanie hraca.
	float slowness_on_top_for_left_team;	// ???
	float slowness_on_top_for_right_team;	// ???
	float stamina_inc_max;					// Maximalny prirastok staminy hraca.
	float stamina_max;						// Maximalna uroven staminy hraca.
	float stopped_ball_vel;					// Rychlost zastavenej lopty.
	float tackle_back_dist;					// ???
	float tackle_dist;						// Vzdialenost smykacky.
	float tackle_exponent;					// ???
	float tackle_power_rate;				// Prudkost smykacky.
	float tackle_width;						// ???
	float visible_angle;					// Uhol pohladu pozerajuceho sa hraca. 
	float visible_distance;					// Vzdialenost pohladu pozerajuceho sa hraca.
	float wind_ang;							// ???
	float wind_dir;							// Smer fukania vetru.
	float wind_force;						// Sila vetru.
	float wind_rand;						// Sum priamo priadany k parametrom vetra.
	
	// Pri pridavani dalsich parametrov treba inkrementovat SERVER_PARAMS_COUNT !!!

/* -----------------------------------------	
	
	MOZNO POTENCIONALNE ZMAZAT	

	Nasledujuce parametre povodnych Roztocov neviem co znamenaju
 
	float recover_init;
	float team_actuator_noise;
	float ctlradius_width;
	float kickable_area;
	int lcm_st;
	int kickoffoffside;

	float dist_qstep;
	float land_qstep;
	float dir_qstep;
	float dist_qstep_l;
	float dist_qstep_r;
	float land_qstep_l;
	float land_qstep_r;
	float dir_qstep_l;
	float dir_qstep_r;
 */
};

// Pocet parametrov struktury PLAYER_PARAMS
#define PLAYER_PARAMS_COUNT 23
// Parametre hraca
struct PLAYER_PARAMS
{
	// NAZOV PARAMETRA							// VYZNAM PARAMETRA
	int player_types;							// Typ heterogenneho hraca (0 je povodny hrac)
	int pt_max;									// ???
	int random_seed;							// ???
	int subs_max;								// Online kouc moze zmenit typy hracov subs_max krat pocas zapasu (iba v nehernych modoch).
	
	float dash_power_rate_delta_max;			// Maximalny prirastok dash_power_rate pre heterogenneho hraca.
	float dash_power_rate_delta_min;			// Minimalny prirastok dash_power_rate pre heterogenneho hraca.
	float effort_max_delta_factor;				// Maximalny prirastok faktoru effort pre heterogenneho hraca.
	float effort_min_delta_factor;				// Minimalny prirastok faktoru effort pre heterogenneho hraca.
	float extra_stamina_delta_max;				// Maximalny prirastok k stamine pre heterogenneho hraca.
	float extra_stamina_delta_min;				// Minimalny prirastok k stamine pre heterogenneho hraca.
	float inertia_moment_delta_factor;			// Prirastok faktoru momentu zotrvacnosti u heterogenneho hraca.
	float kick_rand_delta_factor;				// Prirastok faktoru sumu priamo priadaneho ku kopnutiam u heterogenneho hraca.
	float kickable_margin_delta_max;			// Maximalny prirastok k rozpatiu kopnutia u heterogenneho hraca.
	float kickable_margin_delta_min;			// Minimalny prirastok k rozpatiu kopnutia u heterogenneho hraca.
	float new_dash_power_rate_delta_max;		// Maximalny prirastok ku miere sily sprintovania u heterogenneho hraca.
	float new_dash_power_rate_delta_min;		// Minimalny prirastok ku miere sily sprintovania u heterogenneho hraca.
	float new_stamina_inc_max_delta_factor;		// Maximalny prirastok faktoru zvysovania novej staminy u heterogenneho hraca.
	float player_decay_delta_max;				// Maximalny prirastok utlmu u heterogenneho hraca.
	float player_decay_delta_min;				// Minimalny prirastok utlmu u heterogenneho hraca.
	float player_size_delta_factor;				// Prirastok faktoru velkosti heterogenneho hraca.
	float player_speed_max_delta_max;			// Maximalny prirastok u maximalnej rychlosti u heterogenneho hraca.
	float player_speed_max_delta_min;			// Minimalny prirastok u maximalnej rychlosti u heterogenneho hraca.
	float stamina_inc_max_delta_factor;			// Maximalny prirastok faktoru zvysovania staminy u heterogenneho hraca.

	// Pri pridavani dalsich parametrov treba inkrementovat PLAYER_PARAMS_COUNT !!!
};


// Pocet parametrov struktury PLAYER_TYPE
#define PLAYER_TYPE_PARAMS_COUNT 11
// Typ hraca
struct PLAYER_TYPE
{
	// NAZOV PARAMETRA			// VYZNAM PARAMETRA
	int id;						// Identifikator typu hraca.
	float dash_power_rate;		// Miera sily pri sprintovani tohto typu hraca.
	float effort_max;			// Maximalne usilie u tohto typu hraca.
	float effort_min;			// Minimalne usilie u totho typu hraca.
	float extra_stamina;		// Bonusova stamina navyse pre tento typ hraca.
	float inertia_moment;		// Moment zotrvacnosti typu hraca.
	float kick_rand;			// Nahodny sum pridavany ku kopnutiam tohto typu hraca.
	float kickable_margin;		// Rozpatie kopnutia do lopty u tohto typu hraca.
	float player_decay;			// Utlm pohybu typu hraca.
	float player_size;			// Velkost typu hraca.
	float player_speed_max;		// Maximalna rychlost typu hraca
	float stamina_inc_max;		// Maximalny prirastok staminy v type hraca. 

	// Pri pridavani dalsich parametrov treba inkrementovat PLAYER_TYPE_PARAMS_COUNT !!!
};

#endif // PARAMSTRUCTS_H
